package model

// 用户信息表
type User struct {
	Id        uint   `gorm:"column:id" json:"id" form:"id"`                                         // 主键
	UserName  string `gorm:"column:user_name;size:200" json:"user_name,omitempty" form:"user_name"` // 用户名
	Password  string `gorm:"column:password;size:38" json:"password,omitempty" form:"password"`     // 密码，加密方式为：md5(<输入密码> + 6位随机串)<六位随机串>
	Nickname  string `gorm:"column:nickname;size:200" json:"nickname" form:"nickname"`              // 昵称
	Email     string `gorm:"column:email;size:200" json:"email,omitempty" form:"email"`             // 邮箱
	Phone     string `gorm:"column:phone;size:200" json:"phone,omitempty" form:"phone"`             // 手机号
	Avatar    string `gorm:"column:avatar;size:200" json:"avatar" form:"avatar"`                    // 头像
	Status    int    `gorm:"column:status" json:"status,omitempty" form:"status"`                   // 状态 1-正常 0-禁用
	LastLogin int64  `gorm:"column:last_login" json:"last_login,omitempty" form:"last_login"`       // 最后登录时间(unix时间戳)
	CreatedAt int64  `gorm:"column:created_at" json:"created_at,omitempty" form:"created_at"`       // 创建时间(注册时间，unix时间戳)
	RoleList  string `gorm:"column:role_list" json:"-" form:"-"`                                    // 用户角色列表 json存储

	// 返回给前端使用的字段
	RoleIds []uint `gorm:"-" json:"role_ids,omitempty" form:"role_ids"` // 用户角色ID列表
}

func (u *User) TableName() string {
	return "user"
}

// 用户相关操作日志
type UserLog struct {
	Id   uint   `gorm:"column:id" json:"id" form:"id"`             // 主键
	Uid  uint   `gorm:"column:uid" json:"uid" form:"uid"`          // 用户ID
	Type uint   `gorm:"column:type" json:"type" form:"type"`       // 操作类型 1-登录 2-登出 3-修改资料 4-修改密码
	Msg  string `gorm:"column:msg;size:200" json:"msg" form:"msg"` // 附加备注信息
	Time int64  `gorm:"column:time" json:"time" form:"time"`       // 操作时间(unix时间戳)
	Ip   string `gorm:"column:ip;size:200" json:"ip" form:"ip"`    // IP地址
	Ua   string `gorm:"column:ua;size:300" json:"ua" form:"ua"`    // User-Agent 目前主流浏览器基本限制在200左右，所以此处限制为300长度，超出则进行截取
}

func (u *UserLog) TableName() string {
	return "user_log"
}

// 后台角色管理
type Role struct {
	Id        uint   `gorm:"column:id" json:"id" form:"id"`                                   // 主键
	RoleName  string `gorm:"column:role_name;size:200" json:"role_name" form:"role_name"`     // 角色名称
	Remark    string `gorm:"column:remark;size:200" json:"remark" form:"remark"`              // 备注
	RoleSort  int    `gorm:"column:role_sort" json:"role_sort" form:"role_sort"`              // 角色排序 序号越小越靠前
	RoleMenu  string `gorm:"column:role_menu" json:"-" form:"-"`                              // 角色菜单权限 菜单id，多个使用,拼接
	Status    int    `gorm:"column:status" json:"status" form:"status"`                       // 状态 1-正常 0-禁用
	CreatedAt int64  `gorm:"column:created_at" json:"created_at" form:"created_at"`           // 创建时间(unix时间戳)
	UpdatedAt int64  `gorm:"column:updated_at" json:"-" form:"-"`                             // 更新时间(unix时间戳)
	IsDeleted uint8  `gorm:"column:is_deleted" json:"is_deleted,omitempty" form:"is_deleted"` // 是否删除 1-已删除 0-未删除

	// 返回给前端使用的字段
	MenuIds []uint `gorm:"-" json:"menu_ids,omitempty" form:"menu_ids"` // 角色菜单权限 菜单id数组
}

func (r *Role) TableName() string {
	return "role"
}

// 菜单结构体信息
type Menu struct {
	Id         uint   `gorm:"column:id" json:"id" form:"id"`                                      // 主键
	Title      string `gorm:"column:title;size:200" json:"title" form:"title"`                    // 菜单名称
	OrderNum   int    `gorm:"column:order_num" json:"order_num" form:"order_num"`                 // 排序 序号越小越靠前
	ParentId   uint   `gorm:"column:parent_id" json:"parent_id" form:"parent_id"`                 // 父菜单ID
	MenuType   int    `gorm:"column:menu_type" json:"menu_type" form:"menu_type"`                 // 菜单类型 1-目录 2-菜单 3-按钮
	Icon       string `gorm:"column:icon;size:200" json:"icon" form:"icon"`                       // 菜单图标
	Component  string `gorm:"column:component;size:200" json:"component" form:"component"`        // 前端组件路径
	Permission string `gorm:"column:permission;size:200" json:"permission" form:"permission"`     // 权限标识
	Path       string `gorm:"column:path;size:200" json:"path" form:"path"`                       // 路由地址
	Status     int    `gorm:"column:status" json:"status" form:"status"`                          // 状态 1-正常 0-禁用
	Hidden     int    `gorm:"column:hidden" json:"hidden" form:"hidden"`                          // 是否隐藏 1-隐藏 0-显示
	CreateTime int64  `gorm:"column:create_time" json:"create_time,omitempty" form:"create_time"` // 创建时间
	UpdateTime int64  `gorm:"column:update_time" json:"-" form:"-"`                               // 更新时间
	Name       string `gorm:"column:name;size:200" json:"name" form:"name"`                       // 路由名称

	// 返回给前端使用的字段
	Childs []Menu `gorm:"-" json:"children,omitempty"` // 子菜单
	Meta   struct {
		Title string `json:"title"` // 菜单名称
		Icon  string `json:"icon"`  // 菜单图标
	} `gorm:"-" json:"meta,omitempty"` // 菜单元信息
}

func (m *Menu) TableName() string {
	return "menu"
}
